import {CART_LIST,CKECK_ALL,UN_CKECK_ALL,CHECK_ITEM} from './mutation-type.js'
import { Toast,Dialog } from 'vant';
import http from '@/common/api/request'
export default{
    state:{
        list:[],        //购物车数据
        selectList:[]   //选中的数据
    },
    getters:{
      // 判断是否全选
      isCheckedAll(state){
        return state.list.length == state.selectList.length
      },
      // 总价和数量
      total(state){
        let total={
          num:0,
          price:0,
        }
        state.list.forEach(v=>{
          if(v.checked){
            total.num+=parseInt(v.goods_num)
            total.price+=v.goods_price*v.goods_num
          }
        })
        return total
      }
    },
    mutations:{
      // 获取购物车数据
        [CART_LIST]( state, cartArr){
            state.list = cartArr;
            state.selectList=state.list.map(v=>{
              return v.id
            })
            console.log(state.list)
            console.log(state.selectList)
        },
        // 全选
        [CKECK_ALL](state){
          state.selectList=state.list.map(v=>{
            v.checked=true
            return v.id
          })
        },
        // 全不选
        [UN_CKECK_ALL](state){
          state.list.forEach(v=>{
            v.checked=false
          })
          state.selectList=[]
        },
        // 单选
        [CHECK_ITEM](state,index){
          let id=state.list[index].id
          let i=state.selectList.indexOf(id)
          // 能在selectList中找到对应的id，就删除
          if(i>-1){
            state.selectList.splice(i,1)
            return 
          }
          // 如果之前没有选中，就给selectList添加一个id进去
          state.selectList.push(id)
        },
        // 删除
        delGoods(state){
          state.list=state.list.filter(v=>{
            return state.selectList.indexOf(v.id)== -1
          })
        }
    },
    actions:{
      checkAllFn({commit,getters}){
        getters.isCheckedAll ? commit('UnCheckAll') :commit('checkAll')
      },
      // 删除操作
      delGoodsFn({commit,state},id,e){
        // 如果没有选中，则提示信息
        if(state.selectList.length==0){
          Toast('请选择商品')
        }

        let arrCart=[]
        Dialog.confirm({
          message:'确定要删除这些商品吗？'
        }).then(()=>{
          // 单选删除
          if(typeof id=='number'){
            arrCart=[id]
            let i=state.list.findIndex(v=>v.id==id)
            state.list.splice(i,1)
            state.selectList=state.list.map(v=>{
              return v.id
            })

          }else{
            // 多选删除
            arrCart=state.selectList
            commit('delGoods')
          }

          http.$axios({
            url:'/api/deleteCart',
            method:'POST',
            data:{
              arrId:arrCart
            }
          }).then(res=>{
            if(res.success){
              Toast('删除成功')
            }
          })
        })
      }
    }
}